package me.aartikov.alligator.navigators;


import me.aartikov.alligator.animations.AnimationData;
import me.aartikov.alligator.exceptions.NavigationException;
import me.aartikov.alligator.Screen;
import me.aartikov.alligator.ScreenResult;
import me.aartikov.alligator.destinations.AbilityDestination;

public interface AbilityNavigator {

    boolean goForward(Screen screen,
                   AbilityDestination destination,
                   AnimationData animationData) throws NavigationException;

    boolean replace(Screen screen,
                 AbilityDestination destination,
                 AnimationData animationData) throws NavigationException;

    boolean reset(Screen screen,
               AbilityDestination destination,
               AnimationData animationData) throws NavigationException;

    boolean goBack(ScreenResult screenResult,
                AnimationData animationData) throws NavigationException;



    boolean goBackTo(Class<? extends Screen> screenClass,
                  AbilityDestination destination,
                  ScreenResult screenResult,
                  AnimationData animationData) throws NavigationException;

}
